/*
* Project:日历插件
* By:Iyoole
* Time:2017-08-22
* V:1.01
* */


;(function(e){
    "use strict";
    var i,c={
        config:{
            backToday:false,//返回今天
            dateType:2//1:为简单(日,一,二...);2:为显示周(周一,周二..)
        },
        weekTxt:['星期日','星期一','星期二','星期三','星期四','星期五','星期六']
    },o=function(){
        var _d=new Date();
        return {
            getDate:function(){
                return _d;
            },
            setDate:function(d){
                 _d=d;
            }
        }
    }(),str=function(d){//日期转字符串
        var y=d.getFullYear(),
            m=d.getMonth() + 1,
            day=d.getDate();
        m=(m<=9)?('0'+m):(''+m);
        day=(day<=9)?('0'+day):(''+day);
        return y + m + day;
    };

    var JD=function(elem){
        this.elem=i(elem);
    };
    JD.pt=JD.prototype;
    JD.pt.config={};
    JD.pt.render=function(opts){
        var t=this;
        t.config=i.extend({},c.config,opts);
        t.cache={};
        t.init();
    };
    JD.pt.toDom=function(){//固定显示结构
        var t=this,_c=t.cache;
        _c.head = i('<div/>').addClass('calendar-head');
        _c.week = i('<div/>').addClass('calendar-week');
        _c.date = i('<div/>').addClass('calendar-date');
        t.config.dateType=(t.config.dateType!=1&&t.config.dateType!=2)?2:t.config.dateType;
        _c.week1='<ul><li>周日</li><li>周一</li><li>周二</li><li>周三</li><li>周四</li><li>周五</li><li>周六</li></ul>';
        _c.week2='<ul><li>日</li><li>一</li><li>二</li><li>三</li><li>四</li><li>五</li><li>六</li></ul>';
        _c.week.append(_c['week'+t.config.dateType]);
        var dateStr='<ul>';
        for(var j=0;j<6;j++){
            dateStr+='<li><a href="javascript:;">--</a></li><li><a href="javascript:;">--</a></li><li><a href="javascript:;">--</a></li><li><a href="javascript:;">--</a></li><li><a href="javascript:;">--</a></li><li><a href="javascript:;">--</a></li><li><a href="javascript:;">--</a></li>';
        }
        dateStr+='</ul>';
        _c.date.empty().append(dateStr);
        t.elem.append(_c.head,_c.week,_c.date,_c.info);
        t.toDate();
        t.toDesc(str(new Date()));//显示今天的时间详情
    };
    JD.pt.toDate=function(){//数据填充
        var year  =o.getDate().getFullYear(),
            month =o.getDate().getMonth()+1,
            firstDay=new Date(year,month - 1,1);//当前月的第一天
        var _t=this,_c=_t.cache;
        //填充
        _c.head.text(year+'年'+month+'月');
        _c.date.find('li').removeAttr('class');//移除所有样式
        i.each(_c.date.find('li'),function(n,m){
            var t=$(m),ta=t.find('a');
            var allDay=new Date(year,month - 1,n + 1 - firstDay.getDay()),
                allDayStr=str(allDay);
            t.attr('data-time',allDayStr);
            ta.text(allDay.getDate());
            if(n%7==0||n%7==6){
                t.addClass('calendar-Weekends');
            }
            if(str(new Date())===allDayStr){
                t.addClass('calendar-today');
            }
            if(str(firstDay).substr(0,6)===allDayStr.substr(0, 6)){
                t.addClass('calendar-curMonth')
            }
        });
        _t.config.view?_t.config.view(str(new Date(year,month - 1,1 - firstDay.getDay()))+'-'+str(new Date(year,month - 1,42 - firstDay.getDay()))):"";
    };
    JD.pt.toDesc=function(dt){
        dt=dt.toString();
        var st=dt.substr(0, 4) + '/' + dt.substr(4, 2) + '/' + dt.substring(6) + ' 00:00:00';
        var _d=new Date(st),_t=this;
        var month =_d.getMonth()+1,
            day   =_d.getDate();
        _t.config.info?_t.config.info(month,day,c.weekTxt[_d.getDay()]):"";
        $('li[data-time="'+dt+'"]').addClass('calendar-checked').siblings().removeClass('calendar-checked');
        _t.config.checked?_t.config.checked(dt):"";
    };
    JD.pt.init=function(){//初始化
        var t=this;
        t.toDom();//初始化结构
        t.touch();//滑动事件
        t.checked();
    };
    JD.pt.touch=function(){

    };
    JD.pt.checked=function(){
        var _t=this,_c=_t.cache;
        _c.date.find('li').bind('click',function(){
            var t=i(this),dt=t.data('time');
            _t.toDesc(dt);
        })
    };
    JD.pt.prev=function(){
        var _d=o.getDate();
        o.setDate(new Date(_d.getFullYear(),_d.getMonth() - 1,1));
        this.toDate();
    };
    JD.pt.next=function(){
        var _d=o.getDate();
        o.setDate(new Date(_d.getFullYear(),_d.getMonth() + 1,1));
        this.toDate();
    };
    var JsDate=function(elem){
        return new JD(elem)
    };
    JsDate.v='1.1';
    if(window.fui && fui.define ){
        fui.define('jquery', function(exports){
            e.JsDate=JsDate;
            i=fui.$;
            exports('JsDate', JsDate);
        });
    }else{//如果直接引用的话
        e.JsDate=JsDate;
        i=e.jQuery;
    }
})(window);


